#pragma once

#include <iostream>
#include <string>
#include <sys/types.h>
#include <sys/wait.h>
#include <vector>
#include <unistd.h>
#include <unordered_map>
#include <functional>
using namespace std;
// 定义了一个函数类型，返回值是void,参数为圆括号
typedef std::function<void()> func;
// 定义两个全局变量
std::vector<func> callbacks; // 用来存函数
std::unordered_map<int, std::string> desc;
void readMySQL()
{
    std::cout << "process[" << getpid() << "]执行访问数据库的任务" << std::endl;
}
void execuleUrl()
{
    std::cout << "process[" << getpid() << "]执行Url解析任务" << std::endl;
}
void cal()
{
    std::cout << "process[" << getpid() << "]执行加密任务" << std::endl;
}
void save()
{
    std::cout << "process[" << getpid() << "]执行数据持久化任务" << std::endl;
}
void load()
{
    // 将键值对放入容器
    // 未放入一个元素时，callbackes容器的size是0
    desc.insert({callbacks.size(), "readMySQL:读取数据库"}); // 0
    callbacks.push_back(readMySQL);                          // 将所有函数放入接口中
    // callback.size是1
    desc.insert({callbacks.size(), "execuleUrl:进行Url解析"}); // 1
    callbacks.push_back(execuleUrl);
    // callback.size是2
    desc.insert({callbacks.size(), "cal:进行加密计算"}); // 2
    callbacks.push_back(cal);

    desc.insert({callbacks.size(), "save:进行数据的文件保存"}); // 3
    callbacks.push_back(save);
}
void shwoHandler()
{
    for (const auto &iter : desc)
    {
        // 输出方法编号 方法名称
        cout << iter.first << "\t" << iter.second << endl;
    }
}
int HandlerSize()
{
    return callbacks.size();
}